package com.sokobanboxpro.game.menu;

import com.sokobanboxpro.game.entity.ImageObj;
import com.sokobanboxpro.game.entity.Text;
import com.sokobanboxpro.game.exception.ConfigValueNotFoundException;
import com.sokobanboxpro.game.system.Config;

/**
 * Меню игры.
 *
 * @author Esr
 */
public abstract class Menu {

		/**
		 * Изображения, используемые в меню.
		 */
		protected ImageObj[] images;
		/**
		 * Текст, используемый в меню
		 */
		protected Text[] texts;
		/**
		 * Расположение изображений
		 */
		protected String imagePath;

		/**
		 * Обновление меню.
		 */
		public abstract void update();

		/**
		 * Нажатие мыши или касание экрана.
		 *
		 * @param x Координата x
		 * @param y Координата y
		 */
		public abstract void mousePressed(int x, int y) throws Exception;

		/**
		 * Получить изображения меню.
		 *
		 * @return Изображения
		 */
		public ImageObj[] getImageObj() {
				return images;
		}

		/**
		 * Получить тексты меню.
		 *
		 * @return Массиве текстов
		 */
		public Text[] getText() {
				return texts;
		}

		/**
		 * Проверка поподания точки в облость.
		 *
		 * @param x Координата x точки
		 * @param y Координата y точки
		 * @param lx Левая координата x облости
		 * @param ty Вырхняя координата y облости
		 * @param rx Правая координата x облости
		 * @param by Нижняя координата y облости
		 * @return Попала ли
		 */
		protected boolean checkPoint(int x, int y, int lx, int ty, int rx, int by) {

				return x > lx && x < rx && y > ty && y < by;

		}

		/**
		 * Попали ли координаты в изображение.
		 *
		 * @param x Координата x
		 * @param y Координата y
		 * @param image Изображение для проверки
		 * @return Попали ли координаты в изображение
		 */
		protected boolean checkPointInImage(int x, int y, ImageObj image) {

				return checkPoint(x, y, (int) image.getX(), (int) image.getY(),
								(int) image.getX() + image.getImage().getWidth(),
								(int) image.getY() + image.getImage().getHeight());

		}

		/**
		 * Создание нового меню.
		 *
		 * @throws ConfigValueNotFoundException
		 */
		protected Menu() throws ConfigValueNotFoundException {
				imagePath = Config.toStr("MenuImagePath");
		}

		/**
		 * Функция, вызываемая при изменение состояния приложения.
		 */
		public void changeState() {
		}

}
